Proč vznikl Monitor51 |
Jak používat Monitor51 |
Příkazy MONITORu51 |
Řešení problémů |
Přizpůsobení MONIT51.INC jinému překladači |
Seznam chybových hlášení zaváděcího programu |
-zabírá málo datové paměti (asi 15 Bajtů), přičemž tato paměť je alokována na zásobníku. Postačuje tedy nechat dost místa na zásobníku. Ladíme-li programy pro 8051 a máme k dispozici 8052, lze uvolnit téměř všechny technické prostředky procesoru. Kromě toho potřebuje ještě 3 bajty na adresách 7Dh,7Eh,7Fh |
-nepotřebuje externí paměť dat |
-nepotřebuje stínovou paměť RAM |
-ovládání přes sériovou linku rychlostí 300 - 115200 Bd (dle krystalu) s autodetekcí rychlosti |
-krokování programu po instrukci |
-přeskok instrukcí |
-nastavení breakpointu - bodu, v němž se provádění programu zastaví |
-nastavení hlídané adresy - po změně jejího obsahu se program zastaví |
-výpis všech registrů 8051/52 |
-možnost editace obsahu všech registrů 8051/52 |
-možnost spuštění programu se zastavením na breakpointu |
-možnost provedení odladěného podprogramu bez nutnosti jím krokovat nebo nastavit breakpoint |
-trasování - provádění programu s výpisem adres a instrukcí |
-editace vnitřní i vnější paměti dat |
-disassembling instrukcí z paměti programu s mnoha rozšířeními oproti ostatním monitorům |
-možnost vyskočit z Monitoru51 - provádění programu normální rychlostí. Je umožněn návrat zpět do Monitoru51 |
-načítání INTEL HEX souboru |
-snadné ovládání jednoduchými příkazy |
- zabírá asi 15 B vnitřní paměti (pro odkládání registrů) na zásobníku + 3 bajty na adresách 7Dh,7Eh,7Fh |
- je poměrně velký - kolem 10 KB (nevadí, máte-li simulátor EPROM aspoň 32K). Veli- kost narostla při použití postupů, jež měly za úkol minimalizovat počet využitých registrů a tím zabranou paměť |
- v módu trasování, spuštění programu (příkaz G) a provedení podprogramu (příkaz C) není rychlost provádění programu rovna reálné rychlosti, ale je nižší. Každý krok je totiž synchronizován s přerušením od sériové brány, takže rychlost provedení je závislá na rychlosti přenosu. Je to daň za to, že není použit externí vstup přerušení. Program lze spustit normální rychlostí (příkazem Q), sériovou linku (opět na rozdíl od mnoha monitorů) lze v omezené míře využít; okupace sériové linky je principielní nevýhoda všech monitorů, běžících přímo v procesoru. Nelze ji beze zbytku odstranit - nějak se s procesorem komunikovat musí. Po dodržení některých zásad lze ladit i programy se sériovou komunikací. |
mon_start equ xx00h $include(monit51.inc);Adresa návěští mon_start může být jakákoliv, musí ale splňovat omezení - použití násobků 256 (to znamená např. 0B00h,0F00h,1500h apod.). Místo xx00 doplňte tedy Vámi zvolenou adresu.
asm51.exe muj_prg.asm3. Spusťte.
monit51 muj_prg.hex [/ob] [/oh]Prvním argumentem programu monit51 je název Vašeho přeloženého programu (s příponou HEX nebo BIN), zde muj_prg.hex. K tomuto programu bude doplněn Monitor51. Pokud je Váš program ve formě INTEL HEX a chcete výstup v podobě binární, použijte na místě druhého argumentu přepínač /ob (output as binary). Pokud je Váš program v binární formě a chcete výstup v INTEL HEX, použijte přepínač /oh (output as INTEL HEX). Pokud přepínač neuvedete, použije se pro výstup typ shodný se vstupním souborem. Seznam chybových hlášení zaváděče je v kapitole VI.
muj_prg.hexdo paměti mikroprocesoru (do simulátoru paměti EPROM)
Váš program nesmí obsahovat direktivu ORG s adresou nižší než 26h. Je to dáno tím, že na této adrese je odskok na obsloužení přerušení od sériové linky, které se používá pro komunikaci. Pokud chcete ve svém programu používat odskoky na přerušení, editujte přímo soubor „monit51.inc" a doplňte odskoky na obslužné programy do něj. Pro běžné programy doporučuji použít ORG 30h nebo vyšší anebo tuto direktivu nepoužít vůbec. |
INTERNAL MONITOR 8051/52, ver.4.3 (C)2000 MARTIN HANKOVEC NEGATRON RESEARCH MCS 52 DETECTED > 0034 77 00 MOV @R1,#00H 0036 DA FC DJNZ R2,FCH(rel) 0038 78 20 MOV R0,#20H >Řádka MCS 51 (nebo MCS 52) DETECTED nám říká, jaký máme v aplikaci procesor. Po detekci typu použije Monitor51 pro sériovou linku buď čítač/časovač 1 (u MCS 51), nebo čítač/časovač 2 (u MCS 52). Umožňuje nám to plně využít nejvyšší komunikační rychlosti daného typu procesoru. Na prvním ze tří řádků je vždy instrukce, která se právě bude provádět. Pod ní jsou zobrazeny následující dvě instrukce. Nyní můžeme vložit některý z příkazů Monitoru51.
Monitor51 využívá pro své proměnné zásobník. Dbejte na to, aby na zásobníku bylo dost místa (asi 20 B). Zásobník může být umístěn kdekoliv nad adresou 40h. V této verzi zabírá monitor ještě 3 bajty od adresy 7dh (7dh, 7eh, 7fh). Při ladění aplikací s 8051 se mi nejvíce osvědčilo vložit pro ladicí účely do zařízení procesor 8032 (256 B RAM) a zásobník nastavit nad 80h. Procesory jsou shora kompatibilní a tedy po odladění aplikace jenom vyměním procesor zpět za 8031 a vše funguje, jak má. |
Registry editujte zásadně příkazem R; při běhu Monitoru51 jsou některé registry odloženy a nenacházejí se na své obvyklé adrese. Zásadně nedoporučuji pro editaci obsahu registrů použití příkazu I. Mohlo by dojít k přepisu proměnných Monitoru51 a ke zhroucení systému. |
ERROR - INTEL HEX input file ... cannot be opened ! | Špatné (neexistující) jméno vstupního INTEL HEX souboru, případně špatný formát souboru. |
ERROR - INTEL HEX input file ... cannot be opened ! | Špatné (neexistující) jméno vstupního INTEL HEX souboru, případně špatný formát souboru. |
ERROR - BIN input file ... cannot be opened ! | Špatné (neexistující) jméno vstupního binárního souboru. |
ERROR - File Monit51.bin cannot be found ! | Datový soubor monit51.bin neexistuje. Dodejte ho do stejného adresáře se zaváděčem. (obsahuje data Monitoru51) |
ERROR - Monitor51 start address ....h is bad - use address xx00h only ! | Pro Monitor51 jste použili adresu, jejíž dolní část není 00. Pokud jste použili např. 1234h, použijte místo toho 1200h nebo 1300h |
ERROR - Monitor51 start address ....h is under end address of Your program ! | Příliš nízká počáteční adresa Monitoru51, který by tak zasahoval do Vašeho programu. |
ERROR - File Monit51.bin is corrupted! | Chyba v souboru monit51.bin - použijte soubor z originální distribuce. |
ERROR - Monitor51 start address is to high - Monitor51 exceeds address FFFFh ! | Příliš vysoká počáteční adresa Monitoru51 - jeho konec přesáhne FFFFh. Použijte nižší adresu. Délka Monitoru51 je asi 10KB, proto nejvyšší použitelná adresa je kolem D800h. |
ERROR - BIN output file ... cannot be written ! | Chyba při zápisu výstupního souboru - málo místa na disku, disk chráněn proti zápisu apod. |
ERROR - INTEL HEX output file ... cannot be written ! | Viz výše. |
ERROR - File Monit51.inc is not included into source program! | Pravděpodobně jste vynechali instrukci $include(monit51.inc) ve svém programu. |